/**
 * Electron 预加载脚本 (preload.js)
 *
 * 该脚本在渲染进程加载之前执行，作为主进程和渲染进程之间的桥梁。
 * 主要功能是安全地将 Electron API 和自定义 API 暴露给渲染进程。
 */

// 导入 Electron 的 contextBridge 模块，用于在上下文隔离环境中安全地暴露 API
import { contextBridge } from 'electron'
// 导入预先封装好的 Electron API 集合，简化开发流程
import { electronAPI } from '@electron-toolkit/preload'

/**
 * 自定义 API 对象，用于向渲染进程暴露特定功能
 * 可以在此对象中添加自定义方法和属性，例如：
 * {
 *   getData: () => ipcRenderer.invoke('get-data'),
 *   saveFile: (content) => ipcRenderer.invoke('save-file', content)
 * }
 */
const api = {}

/**
 * 根据上下文隔离状态，选择合适的方式暴露 API
 *
 * 上下文隔离(Context Isolation)是 Electron 的安全特性，
 * 它将预加载脚本和渲染进程的 JavaScript 运行在不同的上下文中，
 * 防止恶意代码访问 Electron 内部 API 或 Node.js 环境。
 */
if (process.contextIsolated) {
  // 如果启用了上下文隔离，使用 contextBridge 安全地暴露 API
  try {
    // 将 electronAPI 暴露为 window.electron
    contextBridge.exposeInMainWorld('electron', electronAPI)
    // 将自定义 API 暴露为 window.api
    contextBridge.exposeInMainWorld('api', api)
  } catch (error) {
    // 捕获并记录可能出现的错误
    console.error(error)
  }
} else {
  // 如果未启用上下文隔离，直接将 API 添加到 window 对象
  // 注意：不启用上下文隔离会带来安全风险，不推荐在生产环境中使用
  window.electron = electronAPI
  window.api = api
}
